package com.tedu.api.list;

import org.junit.Test;

import javax.swing.*;
import java.util.ArrayList;
import java.util.Collection;

/**存放相同的数据----数据989个数据 int[] i=new int[989];1.定长 2.类型固定 需求：存898个数据，而且数据不相同 当我们需求中，
 * 存在数据不确定，类型不确定------使用集合保存数据 集合：存放相同【不相同】的数据的容器，使用功能与数组类型，保存一组数 包位置：
 * Java.util collection 【接口】 顶级集合 容器作用：所有集合的顶级接口，规定所有集合都具备方法 collection【接口】 可以创
 * 建对象---多态创建顶级集合 Collection引用=new ArrayList();爷爷类-->孙子类----继承关系---多态list子接口
 * 【继承collection【接口】】，可以存重复元素，并且有序ArrayList实现类【继承List子接口】，理解为数组LinkedList实现类
 * 【继承List子接口】，理解为数组 LinkedList实现类【继承List子接口】 Set子接口【继承collection【接口】】，不可存重复元素
 */
public class CollectionAPI {
    @Test
    public void testCollection(){
        //创建顶级集合【容器】
        Collection c=new ArrayList();
        /**
         * add(Object o)方法   返回值：Boolean
         * 作用：向当前集合田佳元素，元素可以为任意，才能入 成功为true 失败false
         */
        c.add("每当想起你时"); c.add(77);
        c.add(new JFrame()); c.add(new Object());
        System.out.println("打印集合："+c);
        /**
         * remove(Object o)方法   返回值：boolean
         * 作用：删除集合中给定的元素，只会删除第一个元素
         * 需求：删除c集合中  元素  为1 的内容
         * 底层：采用equals方法进行对比，移出内容与集合内容相等，移出不相等！
         */
        c.remove(77); c.remove("每当想起你时");
        System.out.println("删除后的集合"+c);
        /**
         * size()方法  返回值：int 获取集合中的元素个数----数组存在length，获取数组长度
         */
        int size=c.size();
        System.out.println("集合元素个数"+size);
        /**
         * clear  返回值：Boolean
         * 作用：清空集合
         * isEmpty()方法 返回值：Boolean
         * 作用：返回集合元素，如果有元素false,没有元素显示true
         */
        c.clear();//清空合集
        //System.out.println(c);
        boolean b=c.isEmpty();//是不是空的，是空---没有元素 true
        System.out.println("集合中没有元素"+b);
    }
    /**
     * 当前集合addAll(Collection c【给定集合】)操作：并集 作用：将给定集合中所有的元素添加至当前集合中
     * 添加成功true 返回值：boolean
     */
    @Test
    public void testAddAll(){
        Collection cl=new ArrayList();
        cl.add("Java"); cl.add("net"); cl.add("go");

        Collection c2=new ArrayList();
        c2.add("c语言"); c2.add("PHP"); c2.add("j");
        boolean b=cl.addAll(c2);
        System.out.println("集合并集结果"+cl);
        System.out.println("集合是否成功"+b);
    }
    /**
     * contains()方法 返回值 作用：判断当前集合是否包含给定元素，包含返回true反之亦然 containsAll()方法 返回值：
     * boolean 作用:判断当前集合是否包含给定集合的所有元素 当前集合.containsAll(给定集合)注意：判断所有集合元素一致，
     * 返回：true 当前集合包含给定集合元素，元素存在 返回：true 当前集合包含给定集合元素，元素不存在 返回：false
     * 总结：containsAll,个数不参考，存入顺序，元素数据是否一致
     */
    @Test
    public void testContains(){
        Collection cl=new ArrayList();
        cl.add("Java"); cl.add("net"); cl.add("go");
        Collection c2=new ArrayList();
        c2.add("go");   c2.add("Java"); c2.add("net");
        boolean b1= cl.containsAll(c2);
        System.out.println("c1是否包含c2"+b1);

        //判断集合中，是否存在Java 元素{数据}
        boolean b= cl.contains("Java");
        System.out.println("判断cl中是否存在j元素："+b);
    }
    /**
     * removeAll()返回值：boolean 操作：交集作用：删除当前集合中与给定集合中的共有元素 总结：顺序不参考，
     * 共有元素，存在即删除，保留当前集合
     */
    @Test
    public void testRemoveAll(){
        Collection c3=new ArrayList();
        c3.add("2"); c3.add("2"); c3.add("3");
        Collection c4=new ArrayList();
        c4.add("3"); c4.add("3"); c4.add("3");
        boolean b=c3.removeAll(c4);

        System.out.println("c1是否删除c2的元素"+b);//true
        System.out.println("c1交际的集合"+c3);//[]
    }
}



